As it is generally known, in modern computer systems, a computer application may include or employ multiple application components. For example, applications referred to as “composite applications” combine or make available multiple services from multiple applications. In existing systems, services provided through a composite application may consist of functionality drawn from components in a service oriented architecture (SOA). Components may be individual Web services, selected functions from within other applications, and/or entire systems whose outputs have been packaged as Web services.
Portlets are one example of components that may be connected within a composite application for run time communications. Portlets are typically user interface components that are managed and displayed in a Web portal. For example, a Web portal page is typically displayed as a collection of non-overlapping portlet display areas (sometimes referred to as “windows”), in which each portlet display area is a user interface object for a corresponding portlet. A collection of portlets provided in a portal page may be considered a type of Web-based composite application. Some common examples of component applications that may be provided through portlets are electronic mail (“e-mail”), weather reports, discussion forums, and news.
Web containers, as used in the Java 2 Platform, Enterprise Edition (“J2EE”), are another example of components that may be connected to each other and/or to other components within a composite application.
One example of software connections that facilitate run time communication between application components are application developer defined “wires”. Wires are declarative connections defined by a composite application programmer at program development time, and created by the run time environment (e.g. assembler or the like) at run time. Application component wiring defines and enables run-time, cross-component communications. Wires define the communication between components, e.g. how an event is conveyed from a producer of the event to the consumer of the event. Events conveyed from a producer component to a consumer component through a wire may, for example, include things such as changes to a property value in the producer component, etc.
In existing composite application systems, one or more service provider components create corresponding Web services that are registered to a service registry. Each service provider component exposes one or more services through registered actions that may be accessed by service requester components after the actions have been registered with a service broker. Service registry registrations may identify and/or describe relevant interface and access information for the component and/or its services. The service broker (also referred to as a “service registry”, “property broker”, etc.) makes the registered Web service available to the service requestor components.
A problem with existing systems occurs as a result of service provider components registering the actions they support with the service broker when they are initialized. Since it may be desirable to initialize service provider components on an “as needed” basis, a specific service provider component, and accordingly its constituent actions, may not be available at any given time. For example, it may be desirable for a system to operate such that a service provider component is not initialized until a request is issued for one of the actions it provides. However, this approach may result in performance problems at execution time when a first action request is issued for a service provider component, and that service provider component has not yet been initialized. In such a case, the requested action would not yet have been registered with the service broker, and the system would have to be paused while the service provider component is initialized, until the action has been registered by the service provider component, and the service broker can then process the action request from the service requester. During this pause while the service provider component initializes, delays may occur, e.g. the user may be prevented from controlling the cursor, the user interface may stop refreshing the screen (e.g. a new window for the requested service would be presented only as a white box), and so on. Such delays are frustrating and time consuming for the user, and it would be desirable to have a new system that eliminates them.